Nest 基础
[100s nestJS]:https://www.youtube.com/watch?v=0M8AYU_hPas
NestJS
是一个属于 NodeJS
的服务端框架,它是对 Express
和 Fastify
上做了一层封装,解决了架构问题。NestJS
提供了 Express
和 Fastify
没有的 MVC
、IOC
、AOP
等架构特性,使得代码更容易维护、扩展。
NestJS
基于 TypeScript
编写并且结合了 OOP(面向对象编程)
,FP(函数式编程)
和 FRP (函数式响应编程)
的相关理念。在设计上的很多灵感来自于 Angular
,Angular
的很多模 式又来自于 Java
中的 Spring
框架,
依赖注入、面向切面编程等,所以我们也可以认为: Nest
是 Node.js
版的 Spring
框架。
NestJS
是一个用于构建高效、可扩展的Node.js
服务器端应用程序的开发框架。- JS 届的
Spring
框架 - 支持
TypeScript
语言 - 构建高效可伸缩
- 装饰器风格
- 模块加载采用依赖注入
IOC
方式 (Spring
与AngularJS
) - 配套功能齐备(
鉴权
文档
微服务
CLI
GraphQL
)
- JS 届的
Express 对比 NestJS
生成项目
npm i -g @nestjs/cli
nest new lesson1
src
├── app.controller.spec.ts
├── app.controller.ts # 控制器
├── app.module.ts # 模块定义
├── app.service.ts # service层
└── main.ts # 入口
命令
nest g mo xxx # 生成 Module
nest g co xxx # 生成 Controller
nest g s xxx # 生成 Service
nest g resource xxx # 生成一套Restful风格接口
核心原理
MVC
、IOC
、AOP
MVC
MVC
的全文 是 Model View Controller
。也就是 模型层
,视图层
,控制层
。NestJS
它跟 MVVM
架构不一样,MVC
架构下,请求会先发送到控制层 Controller
,再由它调度模型层 Model
的 Service
来完成业务逻辑,NestJS
最后返回对应的视图层 View
。 下面是它的逻辑图。
IOC
IOC
是Inverse Of Control
的简写。通过@Controller
、@Injectable
装饰器声明类(class) 就会被NestJS
扫描,创建对应的对象并添加到一个容器里,这些对象会根据构造器里声明的依赖 “自动注入”,也就是DI
(dependency inject),这就是IOC
的思想。IOC
架构的好处就是不需要手动创建对象和根据依赖关系传入不同对象的构造器中,一切都是自动扫描并创建、注入的。
AOP
AOP
的全文 Aspect Oriented Programming
。也就是面向切面编程。
在 NestJS
中,一个请求过来,会经过 Controller
到 Service
再到 Repository
。也就是 MVC
的一个流程。 在进入这个 Controller
之前呢,我们会进行一个 JWT
认证 或者异常处理,日志处理等等。
如果直接在改造 Controller
控制层的代码,这显然很不优雅,可能还会使控制器变得无法控制。
所以在进入控制层 Controller
之前,就进行了一个切面,在进入 Controller 之前做一些处理。
VSCode插件
autoimport